# 2024.06.23——比特Python代码案例
# 库函数的应用——日期计算器、字符串

# 日期计算器——datetime库函数的应用
# import datetime     # 通过import引入模块
# # 先构造datetime变量
# date1 = datetime.datetime(year=2023, month=2, day=7)
# date2 = datetime.datetime(year=2024, month=6, day=23)
# print(date2 - date1)

# from datetime import datetime   # 从datetime模块中引入datetime
# date1 = datetime(year=2023, month=2, day=7)
# date2 = datetime(year=2024, month=6, day=23)
# print(date2 - date1)

import datetime as dt  # 引入datetime模块并将其命名为dt

# as——于C/C++中的typedef，可以将模块重命名
date1 = dt.datetime(2023, 2, 7)
date2 = dt.datetime(2024, 6, 23)
print(date2 - date1)


# 字符串——字符串库函数的应用——leetcode习题实例
# 1.剑指offer58.翻转单词顺序——LCR 181. 字符串中的单词反转——字符串、双指针——简单
# 你在与一位习惯从右往左阅读的朋友发消息，他发出的文字顺序都与正常相反但单词内容正确，
# 为了和他顺利交流你决定写一个转换程序，把他所发的消息 message转换为正常语序。
# 注意：输入字符串message中可能会存在前导空格、尾随空格或者单词间的多个空格。
# 返回的结果字符串中，单词间应当仅用单个空格分隔，且不包含任何额外的空格。
# 示例
# 1：
# 输入: message = "the sky is blue"
# 输出: "blue is sky the"
# 示例
# 2：
# 输入: message = "  hello world!  "
# 输出: "world! hello"
# 解释: 输入字符串可以在前面或者后面包含多余的空格，但是反转后的字符不能包括。
# 示例
# 3：
# 输入: message = "a good   example"
# 输出: "example good a"
# 解释: 如果两个单词间有多余的空格，将反转后单词间的空格减少到只含一个。
# 提示：
# 1 <= message.length <= 10 ^ 4
# message中包含英文大小写字母、空格和数字
# message中至少有一个单词

# 解题思路：
# 1.通过str.split方法完成字符串切分
# 2.通过list.reverse方法完成字符串翻转
# 3.通过str.join完成字符串合并


def reverseMessage(self, message: str):
    self = message.split()
    self.reverse()
    return ' '.join(self)


# split——字符串分割，默认以空格分割
# reverse——列表逆置，逆置列表中的元素
# join——字符串合并，以指定字符作为分隔符来合并字符串


# 2.旋转字符串——796. 旋转字符串——字符串、字符串匹配——简单
# 给定两个字符串, s 和 goal。如果在若干次旋转操作之后，s 能变成 goal ，那么返回 true 。
# s 的 旋转操作 就是将 s 最左边的字符移动到最右边。
# 例如, 若 s = 'abcde'，在旋转一次之后结果就是'bcdea' 。
# 示例 1:
# 输入: s = "abcde", goal = "cdeab"
# 输出: true
# 示例 2:
# 输入: s = "abcde", goal = "abced"
# 输出: false
# 提示:
# 1 <= s.length, goal.length <= 100
# s 和 goal 由小写英文字母组成

# 解题思路：
# 1.通过两次s的拼接得到一个长度为2s的主串
# 2.将goal与主串进行字符串匹配

def rotateString(self: bool, s: str, goal: str):
    if len(s) != len(goal):
        return False
    self = goal in s + s
    return self


# 通过in来进行字符串匹配

# 3.字符串前缀数量——2255. 统计是给定字符串前缀的字符串数目——数组、字符串——简单
# 给你一个字符串数组 words 和一个字符串 s ，其中 words[i] 和 s 只包含 小写英文字母 。
# 请你返回 words 中是字符串 s 前缀 的 字符串数目 。
# 一个字符串的 前缀 是出现在字符串开头的子字符串。子字符串 是一个字符串中的连续一段字符序列。
# 示例 1：
# 输入：words = ["a","b","c","ab","bc","abc"], s = "abc"
# 输出：3
# 解释：
# words 中是 s = "abc" 前缀的字符串为：
# "a" ，"ab" 和 "abc" 。
# 所以 words 中是字符串 s 前缀的字符串数目为 3 。
# 示例 2：
# 输入：words = ["a","a"], s = "aa"
# 输出：2
# 解释：
# 两个字符串都是 s 的前缀。
# 注意，相同的字符串可能在 words 中出现多次，它们应该被计数多次。
# 提示：
# 1 <= words.length <= 1000
# 1 <= words[i].length, s.length <= 10
# words[i] 和 s 只 包含小写英文字母。

# 解题思路
# 1.遍历word，取出每个字符
# 2.判断当前字符串是否是s的前缀

def countPrefixes(self: int, words: list[str], s: str):
    self = 0
    for word in words:
        if s.startswith(word):
            self += 1
    return self
# startswith——检测字符串是否以指定字符串开头
